package com.naiterui.ehp.bs.patient.service;

import java.util.List;

import com.naiterui.ehp.bp.domain.Patient;
import com.naiterui.ehp.bp.support.exception.BusinessException;
import com.naiterui.common.repository.page.PageVO;
import com.naiterui.ehp.bs.patient.vo.casefile.CaseDetailVO;
import com.naiterui.ehp.bs.patient.vo.casefile.CaseImgVO;
import com.naiterui.ehp.bs.patient.vo.casefile.CaseListVO;

/**
 * 患者病历档案业务接口。
 * <P>File name : IPatientCaseFileService.java </P>
 * <P>Author : NTR.Amber </P>
 * <P>Date : 2015年9月13日 </P>
 */
public interface IPatientCaseFileService {

    /**
     * 获取病历档案列表。医生端患者端相同结构
     * IPatientCaseFileService.getCaseFileList()<BR>
     * <P>Author : Amber </P>
     * <P>Date : 2015年9月13日 </P>
     * @param patientId
     * @param page 页码
     * @param num 每页数量
     * @return
     */
    PageVO<CaseListVO> getCaseFileList(Long patientId, int page, int num);

    /**
     * 获取患者病历档案详情。
     * IPatientCaseFileService.getCaseDetail()<BR>
     * <P>Author : Amber </P>
     * <P>Date : 2015年9月13日 </P>
     * @param patientId
     * @param caseId
     * @return
     */
    CaseDetailVO getCaseDetail(Long patientId, String caseId) throws BusinessException;

    /**
     * 保存病例档案
     * IPatientCaseFileService.savePatientCaseFile()<BR>
     * <P>Author : Amber </P>
     * <P>Date : 2015年9月13日 </P>
     * @param patient
     * @param detailVO
     * @return
     * @throws Exception
     */
    CaseDetailVO savePatientCaseFile(Patient patient, CaseDetailVO detailVO) throws BusinessException;

    /**
     * 删除病历档案
     * IPatientCaseFileService.deleteCaseFile()<BR>
     * <P>Author : Amber </P>
     * <P>Date : 2015年9月14日 </P>
     * @param patient
     * @param caseId
     */
    void deleteCaseFile(Patient patient, String caseId) throws BusinessException;

    /**
     * 获取病例档案指定类型图片列表
     * IPatientCaseFileService.getCaseFileImgsByType()<BR>
     * <P>Author : Amber </P>
     * <P>Date : 2015年9月14日 </P>
     * @param caseId
     * @param type
     * @return
     */
    List<CaseImgVO> getCaseFileImgsByType(String caseId, Integer type) throws BusinessException;

    /**
     * 更新病例图片
     * IPatientCaseFileService.updateCaseImgs()<BR>
     * <P>Author : Gaoll </P>
     * <P>Date : 2015年9月28日 </P>
     * @param patientid 患者id
     * @param caseId 病例id
     * @param type 图片类型
     * @param newList 目标图片list
     */
    void updateCaseImgs(Long patientid, String caseId, Integer type, List<CaseImgVO> newList) throws BusinessException;

    /**
     * 更新病例图片(CMS)
     * IPatientCaseFileService.updateCaseImgByCms()<BR>
     * <P>Author : Amber </P>
     * <P>Date : 2015年9月15日 </P>
     * @param operator 操作员
     * @param caseId 病例id
     * @param type 图片类型
     * @param newList 目标图片id
     */
    void updateCaseImgByCms(String operator, String caseId, Integer type, List<CaseImgVO> newList) throws BusinessException;

    /**
     * 判断用户是否有上传过病历档案
     * IPatientCaseFileService.haveCaseFile()
     * @Author Amber
     * @Date 2016年1月14日
     * @since 1.0.0
     * @param patientId
     * @return
     * @throws BusinessException
     */
    Boolean haveCaseFile(Long patientId) throws BusinessException;

}
